import { app, BrowserWindow, Menu, screen } from "electron";
import path from "path";
// 是否是生产环境
const isPackaged = app.isPackaged;

const mode = isPackaged == false ? "development" : "production";
// 禁止显示默认菜单
Menu.setApplicationMenu(null);

// 主窗口
let mainWindow;
const createWindow = () => {
  const mainWindow = new BrowserWindow({
    // 默认窗口标题，如果由loadURL()加载的HTML文件中含有标签<title>，此属性将被忽略。
    title: "Electron + Vue3",
    width: 800,
    height: 600,
    // 设置窗口尺寸为屏幕工作区尺寸
    // width: screen.getPrimaryDisplay().workAreaSize.width,
    // height: screen.getPrimaryDisplay().workAreaSize.height,
    // 设置最小尺寸
    minWidth: 800,
    minHeight: 600,
    center: true, // 窗口居中显示
    // transparent: true, // 设置窗口透明
    frame: true, //是否显示顶部导航，去掉关闭按钮 最大化最小化按钮
    // titleBarStyle: "hidden", //Windows下创建的窗口是否带边框

    // frame: false, // 隐藏默认标题栏和边框
    titleBarStyle: "hiddenInset", // MacOS下使用内嵌式无边框样式

    // backgroundColor: "#02243B", //窗口背景
    // fullscreen: true, //全屏设置
    webPreferences: {
      // preload: path.join(__dirname, "preload.js"),
      nodeIntegration: true, //开启true这一步很重要,目的是为了vue文件中可以引入node和electron相关的API
      contextIsolation: true, // 可以使用require方法 // 是否在独立 JavaScript 环境中运行
      enableRemoteModule: true, // 可以使用remote方法
      webSecurity: false, // 它将禁用同源策略 (通常用来测试网站), 如果此选项不是由开发者设置的默认为true
      defaultMonospaceFontSize: 16, //页面字体默认为16
      minimumFontSize: 12, //页面字体最小为12
      //   v8CacheOptions: "bypassHeatCheckAndEagerCompile", //v8CacheOptions 强制 blink 使用 v8 代码缓存策略  除了编译是及时的。 默认策略是 code。
    },

    // 窗口图标。 在 Windows 上推荐使用 ICO 图标来获得最佳的视觉效果, 默认使用可执行文件的图标.
    // 在根目录中新建 build 文件夹存放图标等文件
    // icon: path.resolve(__dirname, "../public/favicon.ico"),
  });
  if (mode === "development") {
    // 开发时

    mainWindow.loadURL("http://localhost:3004/");
    mainWindow.webContents.openDevTools();
  } else {
    mainWindow.loadFile("./dist/index.html");
    mainWindow.webContents.openDevTools();
  }
};

// 在应用准备就绪时调用函数
app.whenReady().then(() => {
  createWindow();

  app.on("activate", () => {
    // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
    // 打开的窗口，那么程序会重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});
// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") app.quit();
});

// 如果开发环境使用了 nginx 代理，禁止证书报错
if (!isPackaged) {
  // 证书的链接验证失败时，触发该事件
  app.on(
    "certificate-error",
    function (event, webContents, url, error, certificate, callback) {
      event.preventDefault();
      callback(true);
    }
  );
}
